CloudFormationを利用してCloudWatchダッシュボードを設置してみた
AWS CloudFormationを利用して、再利用可能なCloudWatchダッシュボードの設置を試みてみました。
はじめに
AWSチームのすずきです。
AWSの複数リソースの稼働確認に役立つCloudWatchダッシュボード、 CloudFormationで設置を試みる機会がありましたので、紹介させて頂きます。
手順
全設定
- CloudWatchダッシュボードの設定情報、「ダッシュボードの編集」を利用してJSON形式で取得する事が可能です。
- 「Copy souce」した結果を「source.json」として保存しました。
個別設定
- グラフの編集画面から、各グラフ単位の設定を確認する事も可能です。
ソート
- JSONの設定と表示順序を一致させ、再利用性を向上するため「jq」コマンドを利用してソートを行いました。
cat source.json | jq '.widgets' | jq 'sort_by(.y)'
CloudFormationテンプレート作成
- エクスポートしたJSON、CloudFormationの「DashboardBody」として利用する事が可能です。
AWSTemplateFormatVersion: '2010-09-09' Description: Dashboard for monitoring LoadBalancer RequestCount Resources: DashboardSideBySide: Type: AWS::CloudWatch::Dashboard Properties: DashboardBody: !Sub | { "widgets": [ { "type": "metric", "x": 0, "y": 2, "width": 6, "height": 6, "properties": { "metrics": [ [ "AWS/ApplicationELB", "RequestCount", "LoadBalancer", "app/aaaaaaaa/aaaaaaaa", "AvailabilityZone", "ap-northeast-1a", { "period": 300, "stat": "Sum" } ] ], "view": "timeSeries", "stacked": true, "region": "ap-northeast-1", "period": 300 } } ] }
- 監視対象のリソース、CloudFormationのパラメータとする事で再利用性を高めました。
Parameters: AlbLoadBalancer: Description: AlbLoadBalancer Type: String Default: app/aaaaaaaa/aaaaaaaa Resources: DashboardSideBySide: Type: AWS::CloudWatch::Dashboard Properties: DashboardBody: !Sub | { "widgets": [ { "type": "metric", "x": 0, "y": 2, "width": 6, "height": 6, "properties": { "metrics": [ [ "AWS/ApplicationELB", "RequestCount", "LoadBalancer", "${AlbLoadBalancer}", "AvailabilityZone", "ap-northeast-1a", { "period": 300, "stat": "Sum" } ] ], "view": "timeSeries", "stacked": true, "region": "ap-northeast-1", "period": 300 } } ] }
利用例
- cloudwatch-dashboard-for-ec2autoscale.yaml
- ELB、AutoScallingGroup、RDS、EC2の情報をCloudFormationのパラメータとして指定する事で、以下の記事で紹介したCloudWatchダッシュボードを再現する事ができました。
まとめ
CloudFormationを利用してCloudWatchダッシュボードを管理することで、グラフ項目、単位などの揺れの抑制や効率的な管理が可能になります。 LAMP構成など、類似のシステムが多数存在する環境ではぜひお試しください。
テンプレート
今回の検証、以下のCloudFormationテンプレートを利用しました。